<?php
/**
 * 定数定義ソース自動生成モジュール
 */
require_once __DIR__ .  '/../ZendPartial.php';

/**
 * 定数定義ソース自動生成クラス
 */
class ZendPartial_NamesDicController extends ZendPartialController
{
	/** テンプレートファイル名 */
	const NAME_TEMPLATE = 'NamesDic.tpl';
	/** キー：コメント */
	const KEY_COMMENT = 'COMMENT';
	/** キー：名前 */
	const KEY_NAME = 'NAME';
	/** キー：定数値 */
	const KEY_VALUE = 'VALUE';

	/** 入力ＣＳＶファイル名 */
	protected $_NameFileCsv;
	/** 出力定数定義ソースファイル名 */
	protected $_NameFilePhp;
	/** 自動生成要請フラグ */
	protected $_isNeed;

	/**
	 * コンストラクタ
	 */
	public function __construct()
	{
		parent::__construct(__DIR__);

		$this->_NameFileCsv = APPLICATION_PATH.'/models/Names/Names.csv';
		$this->_NameFilePhp = APPLICATION_PATH.'/models/Names/Names.php';

		/***
		 * 自動生成要請判定
		*/
		if (!$this->_needModifyNameDic()){
			$this->_isNeed = FALSE;
			return;
		}
		$this->_isNeed = TRUE;

		/***
		 * CSVファイル読み込み（文字コード調整）
		*/
		$CsvText = file($this->_NameFileCsv, FILE_IGNORE_NEW_LINES|FILE_SKIP_EMPTY_LINES);
		mb_convert_variables('UTF-8', "SJIS", $CsvText);

		$aryNameDic = array();
		/***
		 * 行毎に定数コードを生成する
		*/
		foreach ($CsvText as $Line) {
			$aryDivide = explode(',', $Line);
			/***
			 * 最低コメントと定数名の２カラムは必要
			*/
			if (count($aryDivide) == 2){
				$aryNameDic[]
				= array(
						self::KEY_COMMENT=>trim($aryDivide[0]),
						self::KEY_NAME=>trim($aryDivide[1]),
						self::KEY_VALUE=>trim($aryDivide[1])
				);
			/*** 3カラムなら呈すうち指定 */
			} else if (count($aryDivide) >= 3) {
				if (trim($aryDivide[2] == '')) {
					$aryDivide[2] = trim($aryDivide[1]);
				}
				$aryNameDic[]
				= array(
						self::KEY_COMMENT=>trim($aryDivide[0]),
						self::KEY_NAME=>trim($aryDivide[1]),
						self::KEY_VALUE=>trim($aryDivide[2])
				);
			}
		}
		$this->view->DicDataset = $aryNameDic;

		$DicSource = '<?php'."\r\n". $this->fetch();
		file_put_contents($this->_NameFilePhp, $DicSource);
	}

	/**
	 * 生成するＰＨＰソースファイル名を返す
	 */
	public function getNameFilePhp()
	{
		return $this->_NameFilePhp;
	}

	/**
	 * 生成実施(non-PHPdoc)
	 * @see ZendPartialController::fetch()
	 */
	public function fetch($TemplateFileName='')
	{
		$sHtml = parent::fetch(self::NAME_TEMPLATE);
		return $sHtml;
	}

	/**
	 * 自動生成要請判定
	 */
	protected function _needModifyNameDic()
	{
		/***
		 * 入力指定ファイルが見つからなければＦＡＬＳＥリターン
		*/
		if (!file_exists($this->_NameFileCsv)){
			return FALSE;
		}
		/***
		 * 出力ＰＨＰファイルがなければ、これから造るということでＴＲＵＥリターン
		*/
		if (!file_exists($this->_NameFilePhp)){
			return TRUE;
		}
		/***
		 * タイムスタンプがＣＳＶが新しければＴＲＵＥリターン
		*/
		if (filemtime($this->_NameFileCsv) > filemtime($this->_NameFilePhp)){
			return TRUE;
		}
		/***
		 * 上のいずれにも一致しなければＦＡＬＳＥリターン
		*/
		return FALSE;
	}
}